#include<bits/stdc++.h> 
using namespace std;
//	由于密码有时候很难分辨其中的1和l，0和O,所以把1用@替换，0用%替换，l用L替换，O用o替换。
//	现在的任务就是判断密码以及把密码变成看得懂的格式
//1.每个输入包含一个测试用例，每个测试用例第一行为一个正整数N≤1000。然后跟着N行账户，每
//	个账户有一个用户姓名和密码，都是不超过10位的字符串
//2.对于每一个测试用例，首先输出要修改的账户总数M，然后跟着M行输出账户的信息，即姓名和改
//	良密码，输入和输出的顺序必须一样。
//3.如果没有要改的账户，则输出 There are N accounts and no account is modified。当N=1时，
//	输出 There is 1 account and no account is modified
//4.字符串处理
int main(){
	int N;
	vector<string>names;	//虽然map会方便，但是插入后map会排序，而unordered_map也是倒序存储，所以不利于这道题的读取，用向量这些就比较合适 
	vector<string>pwds;
	cin>>N;
	for(int i = 0;i<N;i++){
		string name, pwd;
		cin>>name>>pwd;
		bool flag = false;
		for(unsigned int i =0;i<pwd.length();i++){
			switch(pwd[i]){
				case '1':{
					pwd[i] = '@';
					flag = true;
					break;
				}
				case 'l':{
					pwd[i] = 'L';
					flag = true;
					break;
				}
				case '0':{
					pwd[i] = '%';
					flag = true;
					break;
				}
				case 'O':{
					pwd[i] = 'o';
					flag = true;
					break;
				}
				default:{
					break;
				}
			}
		}
		if(flag == true){
			names.push_back(name);
			pwds.push_back(pwd);
		}
	}
	if(names.size()==0){
		if(N==1){
			cout<<"There is 1 account and no account is modified"<<endl;
		}
		else{
			cout<<"There are "<<N<<" accounts and no account is modified"<<endl;
		}
	}
	else{
		cout<<names.size()<<endl;
		for(unsigned int i = 0;i<names.size();i++){
			cout<<names[i]<<" "<<pwds[i]<<endl;
		}
	}
	
	return 0;
}